package com.cyou.dream.define;

import com.cyou.dream.context.RuleResult;

import java.util.List;

/**
 * 策略判断条件类型
 * <p>
 * 目前支持以下两种：
 * <ul>
 *     <li>ALL_MUST_PASS：所有规则必须通过，策略判断结果为通过，等价于：&&</li>
 *     <li>ANY_PASS：任意规则通过则策略通过，即：||</li>
 * </ul>
 */
public enum EConditionType {

    ALL_MUST_PASS {
        public boolean check(List<RuleResult> results) {
            return results.stream().allMatch(RuleResult::isPassed);
        }
    },
    ANY_PASS {
        public boolean check(List<RuleResult> results) {
            return results.stream().anyMatch(RuleResult::isPassed);
        }
    };

    public abstract boolean check(List<RuleResult> results);


}
